//
//  CZUserViewModel.swift
//  Weibo
//
//  Created by 董松 on 16/2/27.
//  Copyright © 2016年 董松. All rights reserved.
//

import UIKit
import AFNetworking

class CZUserViewModel: NSObject {
    
    //MARK:通过code来换取token
    //定义一个请求token的方法
    //添加2个闭包参数，一个成功，一个失败
    
    func loadToken(code: String,success: ()->(),failure: ()->()) {
        
        //写一个post网络请求
        
        //先实例化一个manager
        
        let afn = AFHTTPSessionManager()
        
        //修改afn的接受类型
        afn.responseSerializer.acceptableContentTypes?.insert("text/plain")
        
        //拼接参数
        
        let params = ["client_id": App_KEY,
            "client_secret":APP_SECERT,
            "grant_type":"authorization_code",
            "code":code,
            "redirect_uri":App_URL
        ]

        
        print(params)
        
        // 发送一个Post请求
        /*
        第一个参数: 请求网络的URL
        第二个参数: POST的参数
        第三个参数: 进度
        第四个参数: 成功的回调.其中 <#NSURLSessionDataTask?#> 我们不需要使用,可以采用 下划线(_) 来忽略
        */
        afn.POST("https://api.weibo.com/oauth2/access_token", parameters: params, progress: nil, success: { (_ , JSON) -> Void in
            print(JSON)
            /*
            Optional({
            "access_token" = "2.00TB2V3GjxjoGBcbc730ac43tQwj3C";
            "expires_in" = 157679999;
            "remind_in" = 157679999;
            uid = 5829345367;
            })
            */
            
            //字典转模型
            //let JSON: AnyObject? -> 转换成 [String: NSObject]
            
            
            
            //            let dic = JSON as? [String: NSObject]
            
            if let Odic = JSON as? [String: NSObject] {
                // 强制解包会崩溃
                let userModel = CZUserModel(dic: Odic)
                
                print(userModel.access_token)
                //请求获取个人信息
                //                self.getPersonInfo(userModel)
                
                self.getPersonInfo(userModel, success: success, failure: failure)
            }
            
            }) { (_ , error) -> Void in
                print(error)
                
                //失败也得处理
                //回调
                failure()
        }
        
    }
    
    
    //MARK:--通过Toekn来获取用户信息
    func getPersonInfo(userModel: CZUserModel,success: ()->(),failure: ()->()){
        
        let afn = AFHTTPSessionManager()
        //拼接参数
        /*
        access_token	true	string	采用OAuth授权方式为必填参数，OAuth授权后获得。
        uid	false	int64	需要查询的用户ID。
        screen_name	false	string	需要查询的用户昵称。
        注意事项
        参数uid与screen_name二者必选其一，且只能选其一；
        */
        let params = ["access_token":userModel.access_token ?? "",
            "uid":userModel.uid ?? ""
        ]
        
        
        print(params)// ["access_token": "2.00TB2V3GjxjoGBcbc730ac43tQwj3C", "uid": "5829345367"]
        
        afn.GET("https://api.weibo.com/2/users/show.json", parameters: params, progress: nil, success: { (_ , JSON) -> Void in
            print(JSON)
            /*
            赋值
            */
            if let dic = JSON as? [String: NSObject]{
                // userModel.profile_image_url是 String类型的
                // dic["profile_image_url"] 是NSObject
                userModel.profile_image_url = dic["profile_image_url"] as? String
                
                userModel.screen_name = dic["screen_name"] as? String
                
                //把数据进行保存 -- 归档
                /*
                1.  NSUserDefault --偏好设置
                2.  归档
                3.  字典写入文件 dic.writeToFile(<#T##path: String##String#>, atomically: <#T##Bool#>)
                4.  数据库 - sqlite
                */
                
                //                //保存
                //                //沙盒路径 -- 沙盒肯定有路径,所以可以强制解包
                //                let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
                //                //拼接文件路径 -- string -> NSString as
                //                let filePath = (path as NSString).stringByAppendingPathComponent("info.aaaa")
                //
                //                NSKeyedArchiver.archiveRootObject(userModel, toFile: filePath)
                
                userModel.save("info.aaaaa")
                //成功的回调
                success()
            }
            
            }) { (_ , error ) -> Void in
                print(error)
                //失败也得处理
                failure()
        }
        
    }
    
    
}
